#define _CRT_SECURE_NO_WARNINGS 1
class Solution {
public:
	int evalRPN(vector<string>& tokens) {

		stack<int>  st; //栈的创建
		int i = 0;//便利tokens数组的下标
		while (i < tokens.size())
		{
			if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/")//遇到符号则取栈的前两个元素
			{
				int right = st.top();//第一个元素为符号的右操作数  因为右操作数后入栈
				st.pop();
				int left = st.top();//第二个元素为符号的左操作数   因为左操作数先入栈
				st.pop();

				if (tokens[i] == "+")// 不同的符号则对应不同的运算
					st.push(left + right);

				else if (tokens[i] == "-")
					st.push(left - right);

				else if (tokens[i] == "*")
					st.push(left * right);

				else
					st.push(left / right);

			}
			else//没有遇到符号则代表遇到字符数字 则用stoi函数转换成整形再入栈 
			{
				st.push(stoi(tokens[i]));
			}

			i++;//下标++
		}
		return st.top();//栈顶即最终结果
	}
};

class Solution {
public:
	int evalRPN(vector<string>& tokens) {

		stack<int>  st; //栈的创建

		for (auto e : tokens)
		{
			if (e == "+" || e == "-" || e == "*" || e == "/")//遇到符号则取栈的前两个元素
			{
				int right = st.top();//第一个元素为符号的右操作数  因为右操作数后入栈
				st.pop();
				int left = st.top();//第二个元素为符号的左操作数   因为左操作数先入栈
				st.pop();

				switch (e[0])// 不同的符号则对应不同的运算
				{
				case '+':
					st.push(left + right);
					break;

				case '-':
					st.push(left - right);
					break;

				case '*':
					st.push(left * right);
					break;

				case '/':
					st.push(left / right);
					break;
				}
			}
			else//没有遇到符号则代表遇到字符数字 则用stoi函数转换成整形再入栈 
			{
				st.push(stoi(e));
			}

		}
		return st.top();//栈顶即最终结果
	}
};